#Использовать cli
#Использовать "."

///////////////////////////////////////////////////////////////////////////////

Процедура ВыполнитьПриложение()
    
    Приложение = Новый КонсольноеПриложение("cli", "Сборщик проекта в бинарники", ЭтотОбъект);
    Приложение.Версия("v version","2.0");
    
    Приложение.ДобавитьКоманду("xml exportEDT", "Экспорт исходников в формат XML", Новый КомандаЭкспортИсходниковEDT);
    Приложение.ДобавитьКоманду("cfe buildCFE", "Сборка расширений", Новый КомандаСборкиВРасширения);
    Приложение.ДобавитьКоманду("cf buildCF", "Сборка конфигураций", Новый КомандаСборкиВКонфигурации);
    Приложение.ДобавитьКоманду("epf portable buildEPF buildPORTABLE", "Сборка портативной версии", Новый КомандаСборкиПортативной);
    Приложение.ДобавитьКоманду("ci", "Сборка версии на github actions", Новый КомандаСборкиНаCI);
    // // Приложение.ДобавитьКоманду("g generate", "Генерация элементов структуры приложения", Новый КомандаGenerate);
    
    Приложение
    .Опция("platformSource", "", "Каталог установки платформы для выполнения сборки")
    .ТСтрока()
    .ВОкружении("TOOLS_UI_1C_BUILDER_PLATFORM_PATH");
    // .ПоУмолчанию(Неопределено);
    Приложение.Опция("edtSource", "", "Каталог расположения исполняемых файлов EDT")
    .ТСтрока()
    .ВОкружении("TOOLS_UI_1C_BUILDER_EDT_PATH")
    .Обязательный();
    // Приложение.ДобавитьКоманду("cfe", "Сборка расширения", Новый СборщикРасширения);
    // // Приложение.ДобавитьКоманду("g generate", "Генерация элементов структуры приложения", Новый КомандаGenerate);
    
    // Приложение.Опция("platformSource", "", "Каталог установки платформы для выполнения сборки");
    // Приложение.Опция("edtSource", "", "Каталог расположения исполняемых файлов EDT");
    // Приложение.Опция("edtWorkspacePath", "", "Каталог расположения рабочей области EDT");
    // Приложение.Опция("exportEDT", Истина, "Определяет необходимость экспортирования исходников из проекта ЕДТ в формат конфигуратора").ТБулево();
    // Приложение.Опция("deleteSourse", Истина, "Нужно ли удалять исходные файлы в формате конфигуратора после сборки");
    // Приложение.Опция("cfe", Истина, "Формировать сборку в формате Расширения");
    // Приложение.Опция("cf", Истина, "Формировать сборку в виде конфигурации");
    // Приложение.Опция("epf", Истина, "Формировать портативную сборку");
    // Приложение.УстановитьОсновноеДействие(ЭтотОбъект);
    
    Приложение.Запустить(АргументыКоманднойСтроки);
    
КонецПроцедуры // ВыполнениеКоманды()

Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт
    Возврат;
    Сборщик = Новый СборщикОсновной();
    Значение = КомандаПриложения.ЗначениеОпции("platformSource");
    Если Не ЗначениеЗаполнено(Значение) Тогда
        Значение = ПолучитьПеременнуюСреды("TOOLS_BUILDER_PLATFORM_PATH");
    КонецЕсли;
    Сборщик.КаталогПлатформы = Значение;
    Значение = КомандаПриложения.ЗначениеОпции("exportEDT");
    Если Значение <> Неопределено Тогда
        Сборщик.ЭкспортироватьИсходникиИзФорматаЕДТ = Значение;
    КонецЕсли;
    Значение = КомандаПриложения.ЗначениеОпции("deleteSourse");
    Если Значение <> Неопределено Тогда
        Сборщик.УдалятьИсходныеФайлыВФорматеКонфигуратора = Значение;
    КонецЕсли;
    Значение = КомандаПриложения.ЗначениеОпции("cfe");
    Если Значение <> Неопределено Тогда
        Сборщик.СборкаРасширения = Значение;
    КонецЕсли;
    Значение = КомандаПриложения.ЗначениеОпции("cf");
    Если Значение <> Неопределено Тогда
        Сборщик.СборкаКонфигурации = Значение;
    КонецЕсли;
    Значение = КомандаПриложения.ЗначениеОпции("epf");
    Если Значение <> Неопределено Тогда
        Сборщик.СборкаПортативная = Значение;
    КонецЕсли;
    Значение = КомандаПриложения.ЗначениеОпции("edtSource");
    Если Не ЗначениеЗаполнено(Значение) Тогда
        Значение = ПолучитьПеременнуюСреды("TOOLS_BUILDER_EDT_PATH");
    КонецЕсли;
    Сообщить("Каталог ЕДТ:"+Значение);
    Если Значение <> Неопределено Тогда
        Сборщик.КаталогЕДТ = Значение;
    КонецЕсли;   
    Значение = КомандаПриложения.ЗначениеОпции("edtWorkspacePath");
    Если Значение <> Неопределено Тогда
        Сборщик.КаталогРабочейОбластиЕДТ = Значение;
    КонецЕсли;
    
    Сборщик.ВыполнитьСборку();
КонецПроцедуры

///////////////////////////////////////////////////////

// Попытка

ВыполнитьПриложение();

// Исключение

// Сообщить(ОписаниеОшибки());

// КонецПопытки;   

// Библиотеки Для использования b91bfc92abf1d819915c3c95b2f311de1c7fd4b3
// https://github.com/oscript-library/bsl-parser - для редактирования описания конфигурации и т.п.
// https://github.com/oscript-library/osparser - для редактирования модулей после сборки
// https://github.com/oscript-library/swagger - для формирования документации в свагере
// https://github.com/oscript-library/onec-repo-converter - Посмотреть пример конвертации исходников из 1С в ЕДТ
// https://github.com/oscript-library/1commands - для запуска приложух если понадобится
// https://github.com/oscript-library/v8find - для поиска нужной платформы для сборки
// https://github.com/oscript-library/cfe2cf - для конвертации расширения в конфигурацию при сборке
// https://github.com/oscript-library/workflow - для описания порядка сборки. Прикольно просто попробовать
// https://github.com/oscript-library/changelog-generate - для генерации истории изменений более простой. Интересно попробовать
// https://github.com/oscript-library/oscript-yadisk - для загрузки артефактов сборки на яндекс диск
// https://github.com/oscript-library/xml-parser- для работы с XML файлами конфы
// https://github.com/oscript-library/v8runner- для работы с конфигуратором